package response

import (
	"admin-api/app/models/entity"
	"admin-api/utils"
	"encoding/json"
	"time"
)

// MenuTree 菜单树
type MenuTree struct {
	Key      int64       `json:"key"`
	Label    string      `json:"title"`
	Children []*MenuTree `json:"children"`
}

// MenuTableResponse 菜单表
type MenuTableResponse struct {
	MenuId     int64               `json:"key"`      // 主键
	MenuName   string              `json:"title"`    // 菜单名称
	MenuCode   string              `json:"menuCode"` // 权限标识
	Icon       string              `json:"icon"`     // 图标
	MenuPath   string              `json:"menuPath"` // 路由
	IsPublic   int                 `json:"isPublic"`
	IsShow     int                 `json:"isShow"`
	ParentId   int64               `json:"parentId"`   // 上级ID
	OrderNum   int                 `json:"orderNum"`   // 排序
	CreateTime time.Time           `json:"createTime"` // 创建时间
	Remark     string              `json:"remark"`     // 备注
	Children   []MenuTableResponse `json:"children"`   // 子数据
}

func (s MenuTableResponse) MarshalJSON() ([]byte, error) {
	type temp MenuTableResponse
	return json.Marshal(&struct {
		temp
		CreateTime utils.DateTime `json:"createTime"`
	}{
		temp:       (temp)(s),
		CreateTime: utils.DateTime(s.CreateTime),
	})
}

// MenuInfoResponse 菜单详情
type MenuInfoResponse struct {
	MenuId   int64  `json:"menuId"`                       // 菜单ID
	ParentId int64  `json:"parentId"`                     // 上级菜单
	MenuType int    `json:"menuType" binding:"required"`  // 菜单类型 (M目录 C菜单 F按钮)
	Icon     string `json:"icon"`                         // 图标
	MenuName string `json:"menuName"  binding:"required"` // 菜单名称
	MenuCode string `json:"menuCode"`                     // 权限字符
	MenuSort int    `json:"menuSort"`                     // 显示顺序
	Path     string `json:"path"`                         // 路由地址
	IsShow   int    `json:"isShow"`                       // 显示状态
	IsPublic int    `json:"isPublic"`                     // 菜单状态
	UserName string `json:"userName"`                     // 用户名称
}

func NewMenuInfo(menu *entity.Menu) *MenuInfoResponse {
	return &MenuInfoResponse{
		MenuId:   menu.MenuId,
		ParentId: menu.ParentId,
		MenuType: menu.MenuType,
		Icon:     menu.Icon,
		MenuName: menu.MenuName,
		MenuSort: menu.OrderNum,
		Path:     menu.MenuPath,
		IsShow:   menu.IsShow,
		IsPublic: menu.IsPublic,
	}
}

// UserRouterResponse 用户路由信息
type UserRouterResponse struct {
	MenuId    int64                `json:"id"`                // 菜单ID
	ParentId  int64                `json:"pId"`               // 上级菜单
	Icon      string               `json:"icon"`              // 图标
	MenuName  string               `json:"title"`             // 菜单名称
	MenuCode  string               `json:"perms"`             // 权限字符
	MenuSort  int                  `json:"sort"`              // 显示顺序
	MenuPath  string               `json:"path"`              // 路由地址
	Component string               `json:"component"`         // 组件路由
	Children  []UserRouterResponse `json:"children" gorm:"-"` // 下级路由
}
